/**
 * 生成密码字符串
 * 33~47：!~/
 * 48~57：0~9
 * 58~64：:~@
 * 65~90：A~Z
 * 91~96：[~`
 * 97~122：a~z
 * 123~127：{~
 * @param length 长度
 * @param hasNum 是否包含数字 1-包含 0-不包含
 * @param hasChar 是否包含字母 1-包含 0-不包含
 * @param hasSymbol 是否包含其他符号 1-包含 0-不包含
 * @param caseSense 是否大小写敏感 1-敏感 0-不敏感
 * @param lowerCase 是否只需要小写，只有当hasChar为0且caseSense为1时起作用 1-全部小写 0-全部大写
 */
export function genPassword(length, hasNum = true, hasChar = true, hasSymbol = false, caseSense = true, lowerCase = false) {
  let m = "";
  if (!hasNum && !hasChar && !hasSymbol) {
    return m;
  }

  // asdlfkjalskdjflkjasd
  for (let i = length; i > 0; i--) {
    const num = Math.floor(Math.random() * 94 + 33);
    if (
      (!hasNum && num >= 48 && num <= 57) ||
      (!hasChar && ((num >= 65 && num <= 90) || (num >= 97 && num <= 122))) ||
      (!hasSymbol && ((num >= 33 && num <= 47) || (num >= 58 && num <= 64) || (num >= 91 && num <= 96) || (num >= 123 && num <= 127)))
    ) {
      i++;
      continue;
    }
    m += String.fromCharCode(num);
  }
  if (!caseSense) {
    m = lowerCase ? m.toLowerCase() : m.toUpperCase();
  }
  return m;
}
